const {
  screen,
  BrowserWindow,
  BrowserView,
  shell,
  ipcMain,
  Tray,
  Menu,
  app,
} = require("electron");
const path = require("path");
const url = require("url");
const configManager = require("./utils/config-manager"); // 添加配置管理模块

// 读取配置文件中的平台信息
const config = configManager.getConfig();

// 创建系统托盘
let trayInstance = null;
function createTray() {
  // 如果托盘已存在，返回现有实例
  if (trayInstance && !trayInstance.isDestroyed) {
    return trayInstance;
  }
  const trayIconPath = path.join(__dirname, "assets", "images", "tray.png");
  trayInstance = new Tray(trayIconPath);
  trayInstance.setToolTip("超高清评价系统");
  const contextMenu = Menu.buildFromTemplate([
    { type: "separator" },
    {
      label: "退出",
      click: () => {
        app.quit();
      },
    },
  ]);
  trayInstance.setContextMenu(contextMenu);
  return trayInstance;
}
function getTray() {
  return trayInstance;
}

// 存储所有创建的窗口
let messageWindow = null;

/**
 * 创建消息框窗口
 * @param {Object} options 可选配置项
 * @param {String} options.title 消息标题
 * @param {String} options.message 消息内容
 * @param {String} options.teacherName 教师名称
 * @returns {BrowserWindow} 消息框窗口实例
 */
function createMessageWindow(options = {}) {
  // 如果窗口已存在且未销毁，直接返回
  if (messageWindow && !messageWindow.isDestroyed()) {
    // 更新消息内容
    const tipData = {
      title: options.title,
      message: options.message,
      teacherName: options.teacherName,
      data: options.data,
    };
    messageWindow.webContents.send("update-tip", tipData);

    // 添加延时以确保内容完全渲染后再获取高度
    setTimeout(() => {
      // 执行脚本获取页面内容高度并直接设置窗口高度
      messageWindow.webContents
        .executeJavaScript(
          `
        document.body.scrollHeight;
      `
        )
        .then((contentHeight) => {
          // 根据内容高度调整窗口高度，加上一些边距
          const newHeight = contentHeight;
          messageWindow.setSize(380, newHeight);

          // 设置窗口位置在桌面右下角
          const { workAreaSize } = screen.getPrimaryDisplay();
          const windowBounds = messageWindow.getBounds();
          const x = workAreaSize.width - windowBounds.width - 20; // 距离右边20px
          const y = workAreaSize.height - windowBounds.height - 20; // 距离底部20px

          messageWindow.setPosition(x, y);
        });
    }, 100);
    return messageWindow;
  }

  // 创建消息框窗口
  messageWindow = new BrowserWindow({
    width: 380,
    height: 180, // 初始高度，后续会根据内容自动调整
    show: false,
    frame: false,
    transparent: true,
    alwaysOnTop: true,
    resizable: false,
    skipTaskbar: true,
    hasShadow: false,
    type: "popup",
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      preload: path.join(__dirname, "messagePage", "preload.js"),
    },
  });

  // 防止窗口被拖动（由内容区域控制拖动）
  messageWindow.setMovable(false);

  // 加载消息页面
  messageWindow.loadFile("electron/messagePage/message.html");

  // 设置窗口层级为浮动在最顶层
  messageWindow.setAlwaysOnTop(true, "normal", 1);

  // 当页面加载完成后，更新消息内容并显示窗口
  messageWindow.webContents.on("did-finish-load", () => {
    // 为任务提醒设置特定的type
    const tipData = {
      title: options.title,
      message: options.message,
      teacherName: options.teacherName,
      data: options.data,
    };
    messageWindow.webContents.send("update-tip", tipData);
    // 添加延时以确保内容完全渲染后再获取高度
    setTimeout(() => {
      // 执行脚本获取页面内容高度并直接设置窗口高度
      messageWindow.webContents
        .executeJavaScript(
          `
      document.body.scrollHeight;
    `
        )
        .then((contentHeight) => {
          // 根据内容高度调整窗口高度，加上一些边距
          const newHeight = contentHeight;
          messageWindow.setSize(380, newHeight);

          // 设置窗口位置在桌面右下角
          const { workAreaSize } = screen.getPrimaryDisplay();
          const windowBounds = messageWindow.getBounds();
          const x = workAreaSize.width - windowBounds.width - 20; // 距离右边20px
          const y = workAreaSize.height - windowBounds.height - 20; // 距离底部20px

          messageWindow.setPosition(x, y);
          messageWindow.show();
        });
    }, 100);
  });

  // 监听关闭事件
  messageWindow.on("closed", () => {
    messageWindow = null;
  });

  return messageWindow;
}
function getMessageWindow() {
  return messageWindow;
}

// IPC 事件处理
ipcMain.on("button-click", (event) => {
  console.log("消息框按钮被点击");
});

module.exports = {
  createTray,
  getTray,
  createMessageWindow,
  getMessageWindow,
};
